package response

import (
	"time"
	"wms/internal/model" // 导入基础模型
)

// InventoryResponse 库存信息响应
type InventoryResponse struct {
	ID        uint      `json:"id"`         // 库存ID
	CargoID   uint      `json:"cargo_id"`   // 货物ID
	CargoName string    `json:"cargo_name"` // 货物名称
	CargoCode string    `json:"cargo_code"` // 货物编码
	Category  string    `json:"category"`   // 货物类别
	Quantity  float64   `json:"quantity"`   // 库存数量
	MinStock  float64   `json:"min_stock"`  // 最小库存
	MaxStock  float64   `json:"max_stock"`  // 最大库存
	Status    int       `json:"status"`     // 状态（1:正常 0:禁用）
	UpdatedAt time.Time `json:"updated_at"` // 更新时间
}

// InboundResponse 入库单响应
type InboundResponse struct {
	ID          uint                `json:"id"`           // 入库单ID
	Code        string              `json:"code"`         // 入库单号
	Type        int                 `json:"type"`         // 入库类型
	WarehouseID uint                `json:"warehouse_id"` // 仓库ID
	Warehouse   string              `json:"warehouse"`    // 仓库名称
	SupplierID  *uint               `json:"supplier_id"`  // 供应商ID
	Supplier    string              `json:"supplier"`     // 供应商名称
	OrderNo     string              `json:"order_no"`     // 关联订单号
	Status      int                 `json:"status"`       // 状态
	Note        string              `json:"note"`         // 备注
	Items       []InboundItemDetail `json:"items"`        // 入库货物列表
	TotalAmount float64             `json:"total_amount"` // 总金额
	CreatedBy   uint                `json:"created_by"`   // 创建人ID
	CreatedAt   time.Time           `json:"created_at"`   // 创建时间
	UpdatedAt   time.Time           `json:"updated_at"`   // 更新时间
	Creator     string              `json:"creator"`      // 创建人
	Updater     string              `json:"updater"`      // 更新人
}

// InboundItemDetail 入库单货物详情
type InboundItemDetail struct {
	ID        uint    `json:"id"`         // 入库单货物ID
	CargoID   uint    `json:"cargo_id"`   // 货物ID
	CargoName string  `json:"cargo_name"` // 货物名称
	CargoCode string  `json:"cargo_code"` // 货物编码
	Category  string  `json:"category"`   // 货物类别
	Quantity  float64 `json:"quantity"`   // 入库数量
	UnitPrice float64 `json:"unit_price"` // 单价
	Amount    float64 `json:"amount"`     // 金额
	Note      string  `json:"note"`       // 备注
}

// OutboundResponse 出库单响应
type OutboundResponse struct {
	ID          uint                 `json:"id"`           // 出库单ID
	Code        string               `json:"code"`         // 出库单号
	Type        int                  `json:"type"`         // 出库类型
	WarehouseID uint                 `json:"warehouse_id"` // 仓库ID
	Warehouse   string               `json:"warehouse"`    // 仓库名称
	CustomerID  *uint                `json:"customer_id"`  // 客户ID
	Customer    string               `json:"customer"`     // 客户名称
	OrderNo     string               `json:"order_no"`     // 关联订单号
	Status      int                  `json:"status"`       // 状态
	Note        string               `json:"note"`         // 备注
	Items       []OutboundItemDetail `json:"items"`        // 出库货物列表
	TotalAmount float64              `json:"total_amount"` // 总金额
	CreatedBy   uint                 `json:"created_by"`   // 创建人ID
	CreatedAt   time.Time            `json:"created_at"`   // 创建时间
	UpdatedAt   time.Time            `json:"updated_at"`   // 更新时间
	Creator     string               `json:"creator"`      // 创建人
	Updater     string               `json:"updater"`      // 更新人
}

// OutboundItemDetail 出库单货物详情
type OutboundItemDetail struct {
	ID        uint    `json:"id"`         // 出库单货物ID
	CargoID   uint    `json:"cargo_id"`   // 货物ID
	CargoName string  `json:"cargo_name"` // 货物名称
	CargoCode string  `json:"cargo_code"` // 货物编码
	Category  string  `json:"category"`   // 货物类别
	Quantity  float64 `json:"quantity"`   // 出库数量
	UnitPrice float64 `json:"unit_price"` // 单价
	Amount    float64 `json:"amount"`     // 金额
	Note      string  `json:"note"`       // 备注
}

// --- Detail Response Structs (Added for specific detail view) ---

// InboundOrderDetailItemResponse 入库单详情项响应 (For Detail View)
type InboundOrderDetailItemResponse struct {
	ID               uint       `json:"id"`
	ProductID        uint       `json:"product_id"`        // <-- 添加 ProductID
	ProductCode      string     `json:"product_code"`      // 从 Cargo 获取
	ProductName      string     `json:"product_name"`      // 从 Cargo 获取
	Specification    string     `json:"specification"`     // 从 Cargo 获取
	Unit             string     `json:"unit"`              // 从 Cargo 获取
	Quantity         float64    `json:"quantity"`          // 应收数量
	ReceivedQuantity float64    `json:"received_quantity"` // 实收数量
	PutawayQuantity  float64    `json:"putaway_quantity"`  // 已上架数量
	UnitPrice        float64    `json:"unit_price"`
	BatchNo          string     `json:"batch_no"`
	ProductionDate   *time.Time `json:"production_date"`
	ExpiryDate       *time.Time `json:"expiry_date"`
	LocationID       *uint      `json:"location_id"`
	LocationName     string     `json:"location_name,omitempty"` // 上架库位名称 (如果需要)
	Note             string     `json:"note"`
	// 可以添加 Cargo 的其他信息如果需要
}

// InboundOrderDetailResponse 入库单详情响应 (For Detail View)
type InboundOrderDetailResponse struct {
	ID            uint       `json:"id"`
	Code          string     `json:"code"`      // 入库单号
	Type          int        `json:"type"`      // 入库类型
	TypeName      string     `json:"type_name"` // 入库类型名称 (例如 "采购入库")
	WarehouseID   uint       `json:"warehouse_id"`
	WarehouseName string     `json:"warehouse_name"` // 仓库名称
	SupplierID    *uint      `json:"supplier_id"`
	SupplierName  string     `json:"supplier_name"` // 供应商名称
	ExpectedTime  *time.Time `json:"expected_time"`
	ReceiveTime   *time.Time `json:"receive_time,omitempty"` // <--- 添加收货时间
	OrderNo       string     `json:"order_no"`
	Note          string     `json:"note"`
	Status        int        `json:"status"`      // 状态码
	StatusText    string     `json:"status_text"` // 状态文本 (例如 "待收货")
	UserID        uint       `json:"user_id"`
	UserName      string     `json:"user_name"` // 创建人用户名
	// 可以添加审核人、收货人、上架人信息如果需要
	// ReceiveUserID *uint      `json:"receive_user_id,omitempty"`
	// ReceiveUserName string `json:"receive_user_name,omitempty"`
	CreatedAt time.Time                         `json:"created_at"`
	Items     []*InboundOrderDetailItemResponse `json:"items"` // 商品列表
}

// --- Helper Functions (Added for specific detail view) ---

func GetInboundOrderTypeText(orderType int) string {
	switch orderType {
	case 1:
		return "采购入库"
	case 2:
		return "退货入库"
	case 3:
		return "其他入库"
	default:
		return "未知类型"
	}
}

// GetInboundOrderStatusText 获取入库单状态文本
func GetInboundOrderStatusText(status int) string {
	switch status {
	case model.StatusInboundCancelled: // 0
		return "已取消"
	case model.StatusInboundWaitingReceive: // 1
		return "待收货"
	case model.StatusInboundWaitingPutaway: // 2
		return "待上架"
	case model.StatusInboundCompleted: // 3
		return "已完成"
	default:
		return "未知状态"
	}
}

// ProductWithInventory 带库存信息的商品
type ProductWithInventory struct {
	ID                uint    `json:"id"`                 // 商品ID
	Code              string  `json:"code"`               // 商品编码
	Name              string  `json:"name"`               // 商品名称
	CategoryID        uint    `json:"category_id"`        // 分类ID
	CategoryName      string  `json:"category_name"`      // 分类名称
	Spec              string  `json:"spec"`               // 规格
	Unit              string  `json:"unit"`               // 单位
	TotalQuantity     float64 `json:"total_quantity"`     // 总库存
	LockedQuantity    float64 `json:"locked_quantity"`    // 锁定库存
	AvailableQuantity float64 `json:"available_quantity"` // 可用库存
	MinStock          float64 `json:"min_stock"`          // 最小库存
	MaxStock          float64 `json:"max_stock"`          // 最大库存
	Status            int     `json:"status"`             // 状态
	Price             float64 `json:"price"`              // 新增：价格字段
}

// GetOutboundOrderStatusText 获取出库单状态文本
func GetOutboundOrderStatusText(status int) string {
	switch status {
	case model.StatusOutboundCancelled: // 0
		return "已取消"
	case model.StatusOutboundWaitingPicking: // 1
		return "待拣货"
	case model.StatusOutboundWaitingShipping: // 2
		return "待发货"
	case model.StatusOutboundCompleted: // 3
		return "已完成"
	default:
		return "未知状态"
	}
}

// --- List Response Structs (Added for better list view) ---

// OutboundOrderListResponse 用于出库单列表的响应结构体
type OutboundOrderListResponse struct {
	ID              uint      `json:"id"`              // 出库单ID
	Code            string    `json:"code"`            // 出库单号
	CustomerName    string    `json:"customerName"`    // 客户名称
	CustomerContact string    `json:"customerContact"` // 客户联系人 (如果需要)
	WarehouseName   string    `json:"warehouseName"`   // 仓库名称
	TotalQuantity   float64   `json:"totalQuantity"`   // 总货物数量
	TotalAmount     float64   `json:"totalAmount"`     // 总金额
	CreateTime      time.Time `json:"createTime"`      // 创建时间 (别名)
	Status          int       `json:"status"`          // 状态码
	StatusText      string    `json:"statusText"`      // 状态文本
	// 可以添加其他需要的字段，例如创建人等
	// CreatorName     string    `json:"creatorName"`
}
